/**
* @Title: Test.java
* @Package com.beetlsql
* @Description: TODO(用一句话描述该文件做什么)
* @author antch,861710865@qq.com
* @date 2017年7月3日 下午5:16:27
* @version V1.0
*/

package com.beetlsql;

import java.net.URL;
import java.util.List;

import org.apache.commons.lang3.StringUtils;
import org.beetl.sql.core.ClasspathLoader;
import org.beetl.sql.core.ConnectionSource;
import org.beetl.sql.core.ConnectionSourceHelper;
import org.beetl.sql.core.Interceptor;
import org.beetl.sql.core.SQLLoader;
import org.beetl.sql.core.SQLManager;
import org.beetl.sql.core.UnderlinedNameConversion;
import org.beetl.sql.core.db.DBStyle;
import org.beetl.sql.core.db.MySqlStyle;
import org.beetl.sql.ext.DebugInterceptor;

/**
 * @ClassName: Test
 * @Description: TODO(5分钟开始beetsql)
 * @author antch,861710865@qq.com
 * @date 2017年7月3日 下午5:16:27
 *
 */

public class Test {

	/**
	 * @Title: main @Description: TODO(这里用一句话描述这个方法的作用) @param @param args
	 * 设定文件 @return void 返回类型 @throws
	 */

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		String driver = "com.mysql.jdbc.Driver";
		String url = "jdbc:mysql:///spring?useUnicode=true&amp;characterEncoding=UTF-8";
		String userName = "root";
		String password = "root";
		ConnectionSource source = ConnectionSourceHelper.getSimple(driver, url, userName, password);

		DBStyle dbStyle = new MySqlStyle();

		//sql語句放在class path的/sql目录下
		String sqlpath = "/sql";
		SQLLoader sqlLoader = new ClasspathLoader(sqlpath);

		// 数据库命名跟java命名一样，所以采用DefaultNameConversion，还有一个是UnderlinedNameConversion，下划线风格的，
		UnderlinedNameConversion nc = new  UnderlinedNameConversion();

		// 最后，创建一个SQLManager,DebugInterceptor 不是必须的，但可以通过它查看sql执行情况
		SQLManager sqlManager = new SQLManager(dbStyle,sqlLoader,source,nc,new Interceptor[]{new DebugInterceptor()});


		//使用内置的生成的sql 新增用户，如果需要获取主键，可以传入KeyHolder
		User user = new User();
		user.setAge(19);
		user.setName("小明");
		sqlManager.insert(user);
		System.out.println("保存成功---》》");

		//使用内置sql查询用户
		int id = 1;
		user = sqlManager.unique(User.class,id);
		System.out.println("查询到的用户：：" + user);

		//模板更新,仅仅根据id更新值不为null的列
		System.out.println("模板更新,仅仅根据id更新值不为null的列");
		User newUser = new User();
		newUser.setId(3);
		newUser.setAge(88);
		sqlManager.updateTemplateById(newUser);

		//模板查询
		User query = new User();
		query.setName("xiandafu");
		List<User> list = sqlManager.template(query);
		System.out.println("查询的值：：" + list);

		//shiyo使用user.md 文件中的select语句
		User query2 = new User();
		query2.setAge(78);
		List<User> list2 = sqlManager.select("user.select", User.class,query2);
		System.out.println("**使用sql文件查询结果**");
		System.out.println(list2);

		System.out.println("-------------");
		URL url1 = ClassLoader.getSystemResource("");
		System.out.println("路径：：" + url1);
		String proPath = StringUtils.substringBetween(url1.toString(),"file:/", "/target/classes/");
		System.out.println("项目路径：：" + proPath);
		System.out.println("user.dir::" + System.getProperty("user.dir"));

	}
}
